﻿#define _CRT_SECURE_NO_WARNINGS 
#include"class.h"
//void testDate()
//{
//    Date d1(2024, 11, 6);
//    d1.print();
//    Date d2(2024, 12, 6);
//    int ret = d2 - d1;
//    cout << ret << endl;
//    d1 = d2;
//    d1.print();
//    d1 += 30;
//    d1.print();
//    d1 -= 7;
//    d1.print();
//    ++d1;
//    ++d1;
//    d1.print();
//    d1--;
//    d1.print();
//}
//void testString()
//{
//    //kang::string s1("abcd");
//    ////kang::string s2 = s1;
//    //kang::string s2 = "1234";
//    //s1 = s2;
//    //s1.print();
//    //s2.print();
//    kang::string s3 = "";
//    s3.push_back('a');
//    s3.push_back('b');
//    s3.push_back('c');
//    s3.push_back('d');
//    s3.push_back('e');
//    //s3.insert(0, '1');
//    //s3.insert(0, '2');
//    //s3.insert(0, '3');
//    //s3.insert(0, '4');
//    //s3.insert(6, '5');
//    //s3.insert(0, "123");
//    s3.insert(5, "456");
//    s3.erase(0, 8);
//    s3.print();
//}
/*void testVector()
{
   */ //kang::vector<int> v(10,1);
    //print_container(v);
    //std::vector<int> v1{1, 2, 3, 4, 5, 6};
    //kang::vector<int> v2(v1.begin(), v1.end() - 1);
    //kang::vector<int> v3(v1.begin(), v1.end());
    //kang::vector<int> v2(10,1);
    //kang::vector<int> v3(10,0);
    //kang::vector<int> v4(v3);
    ////v2 = v3;
    //print_container(v2);
    //print_container(v4);
    //v4 = v2;
    //print_container(v4);
    //kang::vector<int> v;
    //v.push_back(1);
    //v.push_back(2);
    //v.push_back(3);
    //v.push_back(4);
    //v.push_back(5);
    //v.push_back(6);
    //v.push_back(7);
    //v.push_back(8);
    //v.insert(v.end(), 0);
    ////v.erase(v.begin());
    ////v.erase(v.begin());
    ////v.erase(v.begin());
    ////v.erase(v.begin());
    //print_container(v);
//    std::vector<int> v;
//    v.push_back(1);
//    v.push_back(2);
//    v.push_back(3);
//    v.push_back(4);
//    //删除所有偶数;
//    auto it = v.begin();
//    while (it != v.end())
//    {
//        if (*it % 2 == 0)
//        {
//            //v.erase(it);
//            it = v.erase(it);
//        }
//        else
//        {
//            ++it;
//        }
//    }
//    //print_container(v);
//}
//void testList()
//{
//    kang::list<int> lt;
//    lt.insert(lt.end(), 1);
//    lt.insert(lt.end(), 2);
//    lt.insert(lt.end(), 3);
//    lt.insert(lt.end(), 4);
//    lt.insert(lt.end(), 5);
//    lt.insert(lt.end(), 6);
//    lt.erase(--lt.end());
//    lt.erase(--lt.end());
//    lt.erase(--lt.end());
//    lt.erase(--lt.end());
//    lt.erase(--lt.end());
//    lt.erase(--lt.end());
//    lt.push_back(1);
//    lt.push_back(2);
//    lt.push_back(3);
//    lt.push_back(4);
//    lt.push_back(5);
//    kang::list<int> lt1(5, 1);
//    print_container(lt1);
//    kang::list<int> lt2(lt.begin(),lt.end());
//    print_container(lt2);
//    kang::list<int> lt3 = lt2;
//    print_container(lt3);
//    lt = lt1;
//    print_container(lt);
//    int ret = lt.size();
//    cout << ret << endl;
//    lt.erase(lt.begin());
//    lt.erase(lt.begin());
//    lt.erase(lt.begin());
//    lt.erase(lt.begin());
//    lt.erase(lt.begin());
//    print_container(lt);
//    lt.clear();
//}
//void testPriority_queue()
//{
//    kang::priority_queue<int, vector<int>, kang::Less<int>> pq;
//    pq.push_back(1);
//    pq.push_back(3);
//    pq.push_back(2);
//    pq.push_back(4);
//    pq.push_back(5);
//    pq.pop();
//    //print_container(pq);
//}
//void testBSTree()
//{
//    int a[] = { 8, 3, 1, 10, 1, 6, 4, 7, 14, 13 };
//    kang::BSTree<int> bt;
//    for (auto e : a)
//    {
//        bt.Insert(e);
//    }
//    bt.Erase(1);
//    bt.InOrder();
//}
//#include<set>
//void usestdset()
//{
//    set<int> s;
//    s.insert({ 1,4,2,3 });
//    for (auto e : s)
//    {
//        cout << e << " ";
//    }
//    cout << endl;
//
//    s.insert({ 5,6,7,4,3 });
//    auto it = s.find(4);
//    if (it != s.end())
//    {
//        s.erase(it);
//    }
//    for (auto e : s)
//    {
//        cout << e << " ";
//    }
//    cout << endl;
//
//    int x = s.erase(7);
//    if (x > 0)cout << "erase success" << endl;
//
//    //std set   find接口的效率是logn；
//}
//#include<map>
//void usestdmap()
//{
    // 利⽤find和iterator修改功能，统计⽔果出现的次数
    //string arr[] = { "苹果", "西⽠", "苹果", "西⽠", "苹果", "苹果", "西⽠",
    //"苹果", "⾹蕉", "苹果", "⾹蕉" };
    //map<string, int> m;
    //for (auto e : arr)
    //{
    //    auto it = m.find(e);
    //    if (it == m.end())
    //    {
    //        //证明没有，直接插入;
    //        m.insert({ e,1 });
    //    }
    //    else
    //    {
    //        //证明已经存在了，此时返回的是该位置的迭代器;
    //        it->second++;
    //    }
    //}


    //利⽤[]查找修改插入功能;，统计⽔果出现的次数
//    string arr[] = { "苹果", "西⽠", "苹果", "西⽠", "苹果", "苹果", "西⽠",
//    "苹果", "⾹蕉", "苹果", "⾹蕉" };
//    map<string, int> countMap;
//    for (auto e : arr)
//    {
//        countMap[e]++;
//    }
//    for (const auto& e : countMap)
//    {
//        cout << e.first << ":" << e.second << endl;
//    }
//    cout << endl;
//}

// 测试代码
//void testAVLTree()
//{
//    AVLTree<int, int> t;
//    // 常规的测试⽤例
//    int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 };
//    // 特殊的带有双旋场景的测试⽤例
//    //int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 };
//    for (auto e : a)
//    {
//        t.Insert({ e, e });
//    }
//    t.Inroder();
//    cout << t.IsBalanceTree() << endl;
//}
//void testRBTree()
//{
//    RBTree<int, int> t;
//    t.insert({ 10,1 });
//    t.insert({ 2,1 });
//    t.insert({ 3,1 });
//    t.insert({ 5,1 });
//    t.insert({ 7,1 });
//    t.IsBalance();
// }
//
//void test()
//{
//   const int& a = 1;
//}
//int main()
//{  
//    //testDate();
//    //testString();
//    //testVector();
//    //testList();
//    //testPriority_queue();
//    //testBSTree();
//    //vector<int>nums({ 3,2,4,5,1 });
//    ////XiEr(nums);
//    ////F_Qsort(nums, 0, 2);
//    //vector<int> tmp(5);
//    //MergeSort(nums,tmp, 0, 4);
//    //print(nums);
//    //BSTree<int> t;
//    //t.Insert(10);
//    //t.Insert(5);
//    //t.Insert(2);
//    //t.Insert(7);
//    //t.Insert(15);
//    //t.Insert(1);
//    //t.Inorder();
//    //while (!t.empty())
//    //{
//    //    cout << endl;
//    //    t.erase(t._root->_val);
//    //    t.Inorder();
//    //}
//    //usestdmap();
//    //testAVLTree();
//    //testRBTree();
//    test();
//    return 0;
//}

class Person
{
public:
    Person()
    {
        cout << "p" << endl;
    }
    ~Person()
    {
        cout << "Person delete" << endl;
    }
};
class Student :public Person
{
public:
    Student()
    {
        cout << "s" << endl;
    }
    ~Student()
    {
        cout << "Student delete" << endl;
    }
};

int main()
{
    Person* p = new Student();
    delete p;
    return 0;
}